package br.mil.eb.pqrmnt7.scc.entity;


import java.util.Date;

import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Access;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.AccessType;
import com.powerlogic.jcompany.commons.config.stereotypes.SPlcEntity;
import javax.persistence.Entity;
/**
 * Classe Concreta gerada a partir do assistente
 */
@SPlcEntity
@Entity
@Table(name="ORDEM_ABASTECIMENTO")
@SequenceGenerator(name="SE_ORDEM_ABASTECIMENTO", sequenceName="SE_ORDEM_ABASTECIMENTO")
@Access(AccessType.FIELD)


@NamedQueries({
	@NamedQuery( name="OrdemAbastecimentoEntity.queryMan", 
				query="from OrdemAbastecimentoEntity"),
	@NamedQuery( name="OrdemAbastecimentoEntity.querySel", 
				query=" select obj.id as id, " +
								"obj.numero as numero, " +
								"obj.dataExpedicao as dataExpedicao, " +
								"obj1.id as viatura_id, " +
								"obj1.modelo as viatura_modelo, " +
								"obj1.numeroEB as viatura_numeroEB, " +
								"obj2.id as motorista_id, " +
								"obj2.nome as motorista_nome, " +
								"obj.situacao as situacao, " +
								"obj.dataAbastecimento as dataAbastecimento, " +
								"obj.volumeAbastecido as volumeAbastecido " +
							"from OrdemAbastecimentoEntity obj " +
								"left outer join obj.viatura as obj1 " +
								"left outer join obj.motorista as obj2 " +
							"order by obj.dataAbastecimento asc"),
	@NamedQuery( name="OrdemAbastecimentoEntity.querySelLookup", 
				query="select id as id, " +
							 "militarQueRecebeu as militarQueRecebeu " +
				  		"from OrdemAbastecimentoEntity " +
				  		"where id = ? " +
				  		"order by dataAbastecimento asc"),
	@NamedQuery( name="OrdemAbastecimentoEntity.recuperaComTipoEMesInformados",
				query=" select obj.id as id, " +
							  "obj.numero as numero, " +
							  "obj.dataExpedicao as dataExpedicao, " +
							  "obj1.id as viatura_id, " +
							  "obj1.modelo as viatura_modelo, " +
							  "obj1.numeroEB as viatura_numeroEB, " +
							  "obj2.id as motorista_id, " +
							  "obj2.nome as motorista_nome, " +
							  "obj.situacao as situacao, " +
							  "obj.dataAbastecimento as dataAbastecimento, " +
							  "obj.volumeAbastecido as volumeAbastecido " +
						"from OrdemAbastecimentoEntity obj " +
							  "left outer join obj.viatura as obj1 " +
							  "left outer join obj.motorista as obj2 " +
						"where obj.dataAbastecimento=:anoMesReferencia and " +
							  "obj.situacao='CONFIRMADA' and " +
							  "obj1.tipoCombustivel.nome=:tipoCombustivel " +
						"order by obj.dataAbastecimento asc"),
	@NamedQuery( name="OrdemAbastecimentoEntity.recuperaComMesInformado",
				query=" select obj.id as id, " +
							  "obj.numero as numero, " +
							  "obj.dataExpedicao as dataExpedicao, " +
							  "obj1.id as viatura_id, " +
							  "obj1.modelo as viatura_modelo, " +
							  "obj1.numeroEB as viatura_numeroEB, " +
							  "obj2.id as motorista_id, " +
							  "obj2.nome as motorista_nome, " +
							  "obj.situacao as situacao, " +
							  "obj.dataAbastecimento as dataAbastecimento, " +
							  "obj.volumeAbastecido as volumeAbastecido " +
						"from OrdemAbastecimentoEntity obj " +
							  "left outer join obj.viatura as obj1 " +
							  "left outer join obj.motorista as obj2 " +
						"where obj.dataAbastecimento=:anoMesReferencia and " +
							  "obj.situacao='CONFIRMADA' " +
						"order by obj.dataAbastecimento asc"),
    @NamedQuery( name="OrdemAbastecimentoEntity.recuperaTodasCriadas",
				query=" select new OrdemAbastecimentoEntity(o.id, o.numero, o.dataExpedicao, o.situacao, o.dataAbastecimento, o.volumeAbastecido, v, m) " +
						"from OrdemAbastecimentoEntity o " +
						"left outer join o.viatura as v " +
						"left outer join o.motorista as m " +
						"where o.situacao='CRIADA' " +
						"order by o.dataAbastecimento asc"),
	@NamedQuery( name="OrdemAbastecimentoEntity.recuperaTodasConfirmadas",
				query=" select o " +
						"from OrdemAbastecimentoEntity o " +
						"left outer join o.viatura as v " +
						"left outer join o.motorista as m " +
						"where o.situacao='CONFIRMADA' " +
						"order by o.dataAbastecimento asc"),
	@NamedQuery( name="OrdemAbastecimentoEntity.recuperaTodasConfirmadasPorPeriodo",
				query=" select o " +
						"from OrdemAbastecimentoEntity o " +
						"left outer join o.viatura as v " +
						"left outer join o.motorista as m " +
						"where o.situacao='CONFIRMADA' and " +
							  "o.dataAbastecimento>=:dataInicio and " +
							  "o.dataAbastecimento<=:dataFim " +
						"order by o.dataAbastecimento asc"),
	@NamedQuery( name="OrdemAbastecimentoEntity.recuperaPorPeriodo",
				query=" select o " +
						"from OrdemAbastecimentoEntity o " +
						"where o.dataAbastecimento>=:dataInicio and " +
							  "o.dataAbastecimento<=:dataFim " +
						"order by o.dataAbastecimento asc")
})
//query=" select new OrdemAbastecimentoEntity(o.id, o.numero, o.dataExpedicao, o.situacao, o.dataAbastecimento, o.volumeAbastecido, v.modelo, v.numeroEB, m.nome) " +
public class OrdemAbastecimentoEntity extends OrdemAbastecimento { 

	private static final long serialVersionUID = 1L;
 	
    /*
     * Construtor padrao
     */
    public OrdemAbastecimentoEntity() {
    }
    
    public OrdemAbastecimentoEntity(Long id, Long numero, Date dataExpedicao, SituacaoOrdemDeAbastecimento situacao, Date dataAbastecimento, Long volumeAbastecido, Viatura viatura, Motorista motorista){
    	System.out.println("= = = = = = = = = = = = = = = = = = = = = = Chamou o construtor em OrdemAbastecimentoEntity.");
    	setId(id);
    	setNumero(numero);
    	setDataExpedicao(dataExpedicao);
    	setSituacao(situacao);
    	setDataAbastecimento(dataAbastecimento);
    	setVolumeAbastecido(volumeAbastecido);
    	setViatura(viatura);
    	setMotorista(motorista);
    }
    
	@Override
	public String toString() {
		//return getMilitarQueRecebeu();
		return getDataExpedicao().toString();
	}

	public boolean isConfirmada() {
		if (this.getSituacao() != null) {
			return this.getSituacao().equals(SituacaoOrdemDeAbastecimento.CONFIRMADA);
		} else {
			return false;
		}
	}
	
	public void setConfirmada(boolean confirmada){
		if (confirmada) {
			this.setSituacao(SituacaoOrdemDeAbastecimento.CONFIRMADA);
		} 
	}
	
}
